/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logicaBancoDeDados;

import classes.Conector;
import classes.Produto;
import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author User
 */
public class ConectaProdutos {

    public Conector conect = new Conector();
    public PreparedStatement prest = null;
    public String sql = null;
    public ResultSet rs = null;

    public ConectaProdutos() {
    }

    public String insere(Produto prod) {
        try {
            if (!isRepetido(prod)) {
                sql = "INSERT INTO produtos (produto,barcode,quant,compra,venda,categoria,dataCompra,vendedor,distribuidora,logEntrada) VALUES (?,?,?,?,?,?,?,?,?,?)";
                System.out.println(prod.getBarCode());
                prest = conect.conn.prepareStatement(sql);
                prest.setString(1, prod.getNomeProduto());
                prest.setString(2, prod.getBarCode());
                prest.setInt(3, prod.getQuantidade());
                prest.setFloat(4, prod.getVenda());
                prest.setFloat(5, prod.getCompra());
                prest.setString(6, prod.getCategoria());
                prest.setString(7, prod.getDataCompra());
                prest.setString(8, prod.getVendedor());
                prest.setString(9, prod.getDistribuidor());
                prest.setString(10, prod.getLogEntrada());
                prest.executeUpdate();
                prest.close();
                return "Cadastrado com sucesso";
            } else {
                return "Já cadastrado";
            }
        } catch (SQLException ex) {
            return ex.getMessage();
        }

    }

    public ArrayList<Produto> listaProduto(String busca, int tipo) {
        ArrayList<Produto> produtos = new ArrayList<Produto>();
        try {
            switch (tipo) {
                case 1:
                    sql = "select * from produtos where produto " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                case 2:
                    sql = "select * from produtos where quant " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                case 3:
                    sql = "select * from produtos where categoria " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                case 4:
                    sql = "select * from produtos where barCode " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                case 5:
                    sql = "select * from produtos where id " + "LIKE ?";
                    prest = conect.conn.prepareStatement(sql);
                    break;
                default:
            }
            prest.setString(1, busca);
            rs = prest.executeQuery();
            while (rs.next()) {
                Produto prod = new Produto();
                prod.setId(rs.getInt("ID"));
                prod.setNomeProduto(rs.getString("produto"));
                prod.setBarCode(rs.getString("barcode"));
                prod.setQuantidade(rs.getInt("quant"));
                prod.setCategoria(rs.getString("categoria"));
                prod.setCompra(rs.getFloat("compra"));
                prod.setVenda(rs.getFloat("venda"));
                prod.setVendedor(rs.getString("vendedor"));
                prod.setDistribuidor(rs.getString("distribuidora"));
                prod.setDataCompra(rs.getString("dataCompra"));
                prod.setLogEntrada(rs.getString("logEntrada"));
                prod.setLogSaida(rs.getString("logSaida"));
                produtos.add(prod);
            }
            rs.close();
            prest.close();
        } catch (SQLException ex) {
            Logger.getLogger(ConectaProdutos.class.getName()).log(Level.SEVERE, null, ex);
        }

        return produtos;
    }

    public ArrayList<Produto> listaTodosProdutos() {
        ArrayList<Produto> produtos = new ArrayList<Produto>();
        try {
            sql = "select * from produtos";
            prest = conect.conn.prepareStatement(sql);
            rs = prest.executeQuery();
            while (rs.next()) {
                Produto prod = new Produto();
                prod.setId(rs.getInt("ID"));
                prod.setNomeProduto(rs.getString("produto"));
                prod.setBarCode(rs.getString("barcode"));
                prod.setQuantidade(rs.getInt("quant"));
                prod.setCategoria(rs.getString("categoria"));
                prod.setCompra(rs.getFloat("compra"));
                prod.setVenda(rs.getFloat("venda"));
                prod.setVendedor(rs.getString("vendedor"));
                prod.setDistribuidor(rs.getString("distribuidora"));
                prod.setDataCompra(rs.getString("dataCompra"));
                produtos.add(prod);
            }
            rs.close();
            prest.close();
        } catch (SQLException ex) {
            Logger.getLogger(ConectaProdutos.class.getName()).log(Level.SEVERE, null, ex);
        }
        return produtos;
    }

    public boolean isRepetido(Produto prod) throws SQLException {
        boolean cond = false;
        sql = "select * from produtos where barCode = ? or produto = ?";
        prest = conect.conn.prepareStatement(sql);
        prest.setString(1, prod.getBarCode());
        prest.setString(2, prod.getNomeProduto());
        rs = prest.executeQuery();
        if (rs.next()) {
            if (prod.getBarCode().equals(rs.getString("barCode")) == true) {
                cond = true;
            }
            if (prod.getId() == rs.getInt("id")) {
                cond = false;
            }
            System.out.println(cond);
        }
        return cond;
    }

    public void altera(Produto prod) {
        try {
            ArrayList<Produto> listaProdutos = listaProduto(String.valueOf(prod.getId()),5);
            sql = "UPDATE produtos set produto =?, barcode = ?, quant = ?,compra = ?,venda = ?,categoria = ?, logEntrada=?  where id = ?";
            prest = conect.conn.prepareStatement(sql);
            prest.setString(1, prod.getNomeProduto());
            prest.setString(2, prod.getBarCode());
            prest.setInt(3, prod.getQuantidade());
            prest.setFloat(5, prod.getVenda());
            prest.setFloat(4, prod.getCompra());
            prest.setString(6, prod.getCategoria());
            prest.setInt(8, prod.getId());
            prest.setString(7, listaProdutos.get(0).getLogEntrada()+"\n"+ prod.getLogEntrada());
            prest.execute();
            JOptionPane.showMessageDialog(null,"Alterado com sucesso");
                    
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(ConectaProdutos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void remove(Produto produto) {
        try {
            sql = "delete from produtos where id = ?";
            prest = conect.conn.prepareStatement(sql);
            prest.setInt(1, produto.getId());
            prest.executeUpdate();
            prest.close();
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro ao remover produto");
        }
    }
}
